The Internet small computer system interface (iSCSI) protocol is an Internet protocol (IP)-based storage networking standard for linking data storage facilities, developed by the Internet Engineering Task Force (IETF). By carrying SCSI commands over IP networks, iSCSI is used to facilitate data transfers over intranets and to manage storage over long distances.
The iSCSI protocol is among the many technologies expected to help bring about rapid development of the storage area network (SAN) market, by increasing the capabilities and performance of storage data transmission. Because of the ubiquity of IP networks, iSCSI can be used to transmit data over local area networks (LANs), wide area networks (WANs), or the Internet and can enable location-independent data storage and retrieval.
Prior art FIG. 1 illustrates a network system 100 including both a host processor 102 and a transport offload engine 104 (i.e. TOE), in accordance with the prior art. As an option, such system 100 may be implemented in the context of the iSCSI protocol. Of course, however, such system 100 may be carried out in any desired protocol context.
In use, once communication across the network 116 is established using a connection or socket, the transport offload engine 104 receives packet data [e.g. iSCSI protocol data units (PDUs), etc.]. Once received, the transport offload engine 104 stores the data contained in the PDUs in a TOE buffer 112, in order to provide time to generate a data available message 117 and send the message to the host processor 102. The foregoing operation of the transport offload engine 104 may be governed by control logic 114 of the transport offload engine 104.
In response to a data available message 117, the host processor 102 generates a data list 106 [e.g. a scatter-gather list (SGL), memory descriptor list (MDL), etc.] that describes the location(s) in application memory 110 where the incoming data is ultimately to be stored. As shown, to accomplish this, the data list 106 may include at least one memory start address where the incoming data in each PDU is to be stored, with each start address followed by the length of a region in the application memory 110.
In use, the host processor 102 generates and associates the data list 106 with a socket (also known as a connection) associated with the received PDUs that prompted the corresponding data available message(s) 117. The incoming data contained in the PDUs is then copied from the TOE buffer 112 to the application memory 110 using the locations described by the data list 106 corresponding to that socket.
To date, the transport offload engine 104 has been utilized for offloading various lower level protocol operations. On the other hand, various operations associated with upper level network protocols (e.g. iSCSI, etc.) have been traditionally carried utilizing the host processor 102. For example, cyclical redundancy checking (CRC) and other upper level network protocol operations are typically performed by the host processor 102. By way of background, CRC provides a check value designed to catch most transmission errors. In use, a decoder calculates a CRC for received data and compares it to a CRC appended to the data. A mismatch indicates that the data was corrupted in transit.
Unfortunately, utilizing the host processor 102 for such upper level network protocol operations detrimentally affects performance of the overall system 100.
There is thus a need for overcoming these and/or other problems associated with the prior art.